A storage system is a processing system adapted to store and retrieve information/data on storage devices (such as disks). The storage system includes a storage operating system that implements a file system to logically organize the information as a hierarchical structure of directories and files on the storage devices. Each file may comprise a set of data blocks, whereas each directory may be implemented as a specially-formatted file in which information about other files and directories are stored.
The storage operating system generally refers to the computer-executable code operable on a storage system that manages data access and access requests (read or write requests requiring input/output operations) and may implement file system semantics in implementations involving storage systems. In this sense, the Data ONTAP® storage operating system, available from NetApp, Inc. of Sunnyvale, Calif., which implements a Write Anywhere File Layout (WAFL®) file system, is an example of such a storage operating system implemented as a microkernel within an overall protocol stack and associated storage. The storage operating system can also be implemented as an application program operating over a general-purpose operating system, such as UNIX® or Windows®, or as a general-purpose operating system with configurable functionality, which is configured for storage applications as described herein.
A storage system is typically implemented as one or more storage volumes that comprise physical storage devices, defining an overall logical arrangement of storage space. Available storage system implementations can serve a large number of discrete volumes, each volume having a separate file system associated therewith. A storage volume is “loaded” in the storage system by copying the logical organization of the volume's files, data, and directories, into the storage system's memory. Once a volume has been loaded in memory, the volume may be “mounted” by one or more users, applications, devices, and the like, that are permitted to access its contents and navigate its namespace.
A storage system may be configured to allow client systems to access its contents, for example, to read or write data to the storage system. A client system may comprise, for example, a personal computer (PC), workstation, laptop, or any other type of computer device for interacting with the storage system. A client system may execute an application that “connects” to the storage system over a computer network, such as a shared local area network (LAN), wide area network (WAN), or virtual private network (VPN) implemented over a public network such as the Internet. The application executing on the client system may send an access request (read or write request) to the storage system for accessing particular data stored on the storage system.
An application executing on the client system may also send a search request to the storage system for searching for particular files of a file system on the storage system. The search request may comprise a content search request for a search based on file content (content search) and/or a metadata search request for a search based on file metadata (metadata search). The search request may be in a format in accordance with a particular search protocol. For example, a Windows® based client may submit a search request in Windows Search Protocol (WSP) to a Windows® based storage system that is configured to receive and perform the search request.
Some storage systems, however, may not be configured for performing content or metadata searches and/or be able to process search requests in particular search protocols. For example, some search protocols (e.g., WSP) may be embedded/integrated within a network file protocol (e.g., Common Internet File System protocol or Network File System protocol) so that the data of the search request is embedded/integrated within data for the network file protocol. Some storage systems may be incompatible with such search request and not be capable of processing the search requests. As such, there is a need for a method for providing search capabilities to storage systems not configured for such having search capabilities.
To enhance search capabilities, a search engine may produce and store (e.g., to the storage system) a central index comprising a content index (for indexing file content) and a metadata index (for indexing file metadata). The central index may be produced by examining each file in the file system and storing content and metadata information regarding each file into the central index. A received search request may then be performed on the central index, rather than examining and searching each individual file in the file system, to reduce the time and resources required to perform the search request. However, the storage system may expend significant time and resources to maintain the central index as each file in the file system is typically re-examined for determining file changes (e.g., file additions, modifications, deletions) at predetermined time intervals to periodically update the central index. As such, there is a need for a method and apparatus for indexing files of a storage system more efficiently.